package com.edu.exam.enums.common;

import com.edu.exam.enums.core.BaseEnum;

/**
 * 操作结果枚举
 *
 * <p>定义通用的操作结果，用于各种系统中的操作执行结果反馈。
 * 这是系统的基础操作结果枚举，提供了标准的成功/失败结果类型。</p>
 *
 * @author System
 * @version 1.0.0
 * @since 2025-11-17
 */
public enum OperationResult implements BaseEnum {

    /**
     * 成功
     */
    SUCCESS("SUCCESS", "成功"),

    /**
     * 失败
     */
    FAILURE("FAILURE", "失败"),

    /**
     * 部分成功
     */
    PARTIAL_SUCCESS("PARTIAL_SUCCESS", "部分成功"),

    /**
     * 取消
     */
    CANCELLED("CANCELLED", "取消"),

    /**
     * 超时
     */
    TIMEOUT("TIMEOUT", "超时"),

    /**
     * 中断
     */
    INTERRUPTED("INTERRUPTED", "中断"),

    /**
     * 异常
     */
    EXCEPTION("EXCEPTION", "异常"),

    /**
     * 重试
     */
    RETRY("RETRY", "重试"),

    /**
     * 跳过
     */
    SKIPPED("SKIPPED", "跳过"),

    /**
     * 等待
     */
    PENDING("PENDING", "等待"),

    /**
     * 警告
     */
    WARNING("WARNING", "警告"),

    /**
     * 错误
     */
    ERROR("ERROR", "错误"),

    /**
     * 严重错误
     */
    CRITICAL("CRITICAL", "严重错误"),

    /**
     * 致命错误
     */
    FATAL("FATAL", "致命错误"),

    /**
     * 无效输入
     */
    INVALID_INPUT("INVALID_INPUT", "无效输入"),

    /**
     * 权限不足
     */
    INSUFFICIENT_PERMISSION("INSUFFICIENT_PERMISSION", "权限不足"),

    /**
     * 资源不存在
     */
    RESOURCE_NOT_FOUND("RESOURCE_NOT_FOUND", "资源不存在"),

    /**
     * 资源已存在
     */
    RESOURCE_ALREADY_EXISTS("RESOURCE_ALREADY_EXISTS", "资源已存在"),

    /**
     * 数据冲突
     */
    DATA_CONFLICT("DATA_CONFLICT", "数据冲突"),

    /**
     * 数据无效
     */
    DATA_INVALID("DATA_INVALID", "数据无效"),

    /**
     * 数据格式错误
     */
    DATA_FORMAT_ERROR("DATA_FORMAT_ERROR", "数据格式错误"),

    /**
     * 网络错误
     */
    NETWORK_ERROR("NETWORK_ERROR", "网络错误"),

    /**
     * 系统错误
     */
    SYSTEM_ERROR("SYSTEM_ERROR", "系统错误"),

    /**
     * 未知错误
     */
    UNKNOWN_ERROR("UNKNOWN_ERROR", "未知错误"),

    /**
     * 业务逻辑错误
     */
    BUSINESS_LOGIC_ERROR("BUSINESS_LOGIC_ERROR", "业务逻辑错误"),

    /**
     * 验证失败
     */
    VALIDATION_FAILED("VALIDATION_FAILED", "验证失败"),

    /**
     * 条件不满足
     */
    CONDITION_NOT_MET("CONDITION_NOT_MET", "条件不满足"),

    /**
     * 操作不支持
     */
    OPERATION_NOT_SUPPORTED("OPERATION_NOT_SUPPORTED", "操作不支持"),

    /**
     * 功能未实现
     */
    FEATURE_NOT_IMPLEMENTED("FEATURE_NOT_IMPLEMENTED", "功能未实现"),

    /**
     * 版本不兼容
     */
    VERSION_INCOMPATIBLE("VERSION_INCOMPATIBLE", "版本不兼容"),

    /**
     * 配置错误
     */
    CONFIGURATION_ERROR("CONFIGURATION_ERROR", "配置错误"),

    /**
     * 依赖缺失
     */
    DEPENDENCY_MISSING("DEPENDENCY_MISSING", "依赖缺失"),

    /**
     * 外部服务错误
     */
    EXTERNAL_SERVICE_ERROR("EXTERNAL_SERVICE_ERROR", "外部服务错误"),

    /**
     * 数据库错误
     */
    DATABASE_ERROR("DATABASE_ERROR", "数据库错误"),

    /**
     * 存储空间不足
     */
    INSUFFICIENT_STORAGE("INSUFFICIENT_STORAGE", "存储空间不足"),

    /**
     * 负载过高
     */
    HIGH_LOAD("HIGH_LOAD", "负载过高"),

    /**
     * 服务不可用
     */
    SERVICE_UNAVAILABLE("SERVICE_UNAVAILABLE", "服务不可用"),

    /**
     * 连接超时
     */
    CONNECTION_TIMEOUT("CONNECTION_TIMEOUT", "连接超时"),

    /**
     * 请求过于频繁
     */
    TOO_MANY_REQUESTS("TOO_MANY_REQUESTS", "请求过于频繁"),

    /**
     * 访问被拒绝
     */
    ACCESS_DENIED("ACCESS_DENIED", "访问被拒绝"),

    /**
     * 会话过期
     */
    SESSION_EXPIRED("SESSION_EXPIRED", "会话过期"),

    /**
     * 令牌无效
     */
    TOKEN_INVALID("TOKEN_INVALID", "令牌无效"),

    /**
     * 证书错误
     */
    CERTIFICATE_ERROR("CERTIFICATE_ERROR", "证书错误"),

    /**
     * 加密错误
     */
    ENCRYPTION_ERROR("ENCRYPTION_ERROR", "加密错误"),

    /**
     * 解密错误
     */
    DECRYPTION_ERROR("DECRYPTION_ERROR", "解密错误"),

    /**
     * 压缩错误
     */
    COMPRESSION_ERROR("COMPRESSION_ERROR", "压缩错误"),

    /**
     * 解压错误
     */
    DECOMPRESSION_ERROR("DECOMPRESSION_ERROR", "解压错误"),

    /**
     * 编码错误
     */
    ENCODING_ERROR("ENCODING_ERROR", "编码错误"),

    /**
     * 解码错误
     */
    DECODING_ERROR("DECODING_ERROR", "解码错误");

    private final String code;
    private final String description;

    OperationResult(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    /**
     * 判断是否为成功结果
     *
     * @return 是否成功
     */
    public boolean isSuccess() {
        return this == SUCCESS || this == PARTIAL_SUCCESS;
    }

    /**
     * 判断是否为失败结果
     *
     * @return 是否失败
     */
    public boolean isFailure() {
        return this == FAILURE || this == ERROR || this == CRITICAL || this == FATAL;
    }

    /**
     * 判断是否为错误结果
     *
     * @return 是否错误
     */
    public boolean isError() {
        return this == ERROR || this == CRITICAL || this == FATAL || this == EXCEPTION;
    }

    /**
     * 根据编码获取对应的枚举
     *
     * @param code 编码
     * @return 对应的枚举
     */
    public static OperationResult fromCode(String code) {
        for (OperationResult result : values()) {
            if (result.getCode().equals(code)) {
                return result;
            }
        }
        throw new IllegalArgumentException("Unknown operation result code: " + code);
    }

    @Override
    public String toString() {
        return this.code + "(" + this.description + ")";
    }
}
